#ifndef __QSPI_H
#define __QSPI_H
#include "sys.h"
//////////////////////////////////////////////////////////////////////////////////	 
//本程序只供学习使用，未经作者许可，不得用于其它任何用途
//ALIENTEK STM32F7开发板
//QSPI驱动代码	   
//正点原子@ALIENTEK
//技术论坛:www.openedv.com
//创建日期:2015/11/30
//版本：V1.0
//版权所有，盗版必究。
//Copyright(C) 广州市星翼电子科技有限公司 2014-2024
//All rights reserved									  
////////////////////////////////////////////////////////////////////////////////// 	
extern QSPI_HandleTypeDef QSPI_Handler;    //QSPI句柄
//#define FLASH_MODULE_USE_ONLY_V02

#ifdef FLASH_MODULE_USE_ONLY_V02
	//B1,2,3,4,5,6
#define	QPI_FLASH_CS_L     HAL_GPIO_WritePin(GPIOE, GPIO_PIN_4, GPIO_PIN_RESET);
#define	QPI_FLASH_CS_H     HAL_GPIO_WritePin(GPIOE, GPIO_PIN_4, GPIO_PIN_SET);

#define	QPI_FLASH_SCK_L    HAL_GPIO_WritePin(GPIOD, GPIO_PIN_12, GPIO_PIN_RESET);
#define	QPI_FLASH_SCK_H    HAL_GPIO_WritePin(GPIOD, GPIO_PIN_12, GPIO_PIN_SET);
	 
#define	QPI_FLASH_IO0_L    HAL_GPIO_WritePin(GPIOD, GPIO_PIN_13, GPIO_PIN_RESET);
#define	QPI_FLASH_IO0_H    HAL_GPIO_WritePin(GPIOD, GPIO_PIN_13, GPIO_PIN_SET);

#define	QPI_FLASH_IO1_L    HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_RESET);
#define	QPI_FLASH_IO1_H    HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_SET);

#define	QPI_FLASH_IO1_GPIO    GPIOE
#define	QPI_FLASH_IO1_PIN    GPIO_PIN_3
	 
#define	QPI_FLASH_IO2_L    HAL_GPIO_WritePin(GPIOD, GPIO_PIN_11, GPIO_PIN_RESET);
#define	QPI_FLASH_IO2_H    HAL_GPIO_WritePin(GPIOD, GPIO_PIN_11, GPIO_PIN_SET)
	 
#define	QPI_FLASH_IO3_L   HAL_GPIO_WritePin(GPIOG, GPIO_PIN_13, GPIO_PIN_RESET);
#define	QPI_FLASH_IO3_H   HAL_GPIO_WritePin(GPIOG, GPIO_PIN_13, GPIO_PIN_SET);

#else
	//B1,2,3,4,5,6
#define	QPI_FLASH_CS_L     HAL_GPIO_WritePin(GPIOB, GPIO_PIN_6, GPIO_PIN_RESET);
#define	QPI_FLASH_CS_H     HAL_GPIO_WritePin(GPIOB, GPIO_PIN_6, GPIO_PIN_SET);

#define	QPI_FLASH_SCK_L    HAL_GPIO_WritePin(GPIOF, GPIO_PIN_10, GPIO_PIN_RESET);
#define	QPI_FLASH_SCK_H    HAL_GPIO_WritePin(GPIOF, GPIO_PIN_10, GPIO_PIN_SET);
	 
#define	QPI_FLASH_IO0_L    HAL_GPIO_WritePin(GPIOF, GPIO_PIN_8, GPIO_PIN_RESET);
#define	QPI_FLASH_IO0_H    HAL_GPIO_WritePin(GPIOF, GPIO_PIN_8, GPIO_PIN_SET);

#define	QPI_FLASH_IO1_L    HAL_GPIO_WritePin(GPIOF, GPIO_PIN_9, GPIO_PIN_RESET);
#define	QPI_FLASH_IO1_H    HAL_GPIO_WritePin(GPIOF, GPIO_PIN_9, GPIO_PIN_SET);
	 
#define	QPI_FLASH_IO2_L    HAL_GPIO_WritePin(GPIOF, GPIO_PIN_7, GPIO_PIN_RESET);
#define	QPI_FLASH_IO2_H    HAL_GPIO_WritePin(GPIOF, GPIO_PIN_7, GPIO_PIN_SET)
	 
#define	QPI_FLASH_IO3_L   HAL_GPIO_WritePin(GPIOF, GPIO_PIN_6, GPIO_PIN_RESET);
#define	QPI_FLASH_IO3_H   HAL_GPIO_WritePin(GPIOF, GPIO_PIN_6, GPIO_PIN_SET);
#endif

u8 QSPI_Init(void);												//初始化QSPI
void QSPI_Send_CMD(u32 instruction,u32 address,u32 dummyCycles,u32 instructionMode,u32 addressMode,u32 addressSize,u32 dataMode);			//QSPI发送命令
u8 QSPI_Receive(u8* buf,u32 datalen);							//QSPI接收数据
u8 QSPI_Transmit(u8* buf,u32 datalen);							//QSPI发送数据
void QPI_WRITE_INSTRUCTION(uint8_t instruction);
#endif
